const express = require('express')
const session = require('express-session')
const mongoStore = require('connect-mongo')(session)
const bodyParser = require('body-parser')
const consola = require('consola')
const { Nuxt, Builder } = require('nuxt')
const app = express()

const adminApi = require('./routes/index')

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))

app.use(session({
  secret: 'kuyyyyyyin', // 一个 String 类型的字符串，作为服务器端生成 session 的签名
  name: 'kuyin_session',  // 保存在本地cookie的一个名字 默认connect.sid  可以不设置
  resave: false,  // 强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。
  saveUninitialized: true,  // 强制将未初始化的 session 存储。  默认值是true  建议设置成true
  cookie: {
    maxAge: 1000 * 60 * 60 * 24 * 7
  },
  rolling: true,  // 在每次请求时强行设置 cookie，这将重置 cookie 过期时间（默认：false）
  store: new mongoStore({
    url: 'mongodb://127.0.0.1:27017/kywebserver',
    // url: 'mongodb://47.104.96.204:37000/xianbaoAuth',
    touchAfter: 60 * 60 * 24  //通过这样做，设置touchAfter:24 * 3600，您在24小时内只更新一次会话，不管有多少请求(除了在会话数据上更改某些内容的除外
  })
}))

app.use('/api', adminApi)

// Import and Set Nuxt.js options
const config = require('../nuxt.config.js')
config.dev = process.env.NODE_ENV !== 'production'

async function start () {
  // Init Nuxt.js
  const nuxt = new Nuxt(config)

  const { host, port } = nuxt.options.server

  // Build only in dev mode
  if (config.dev) {
    const builder = new Builder(nuxt)
    await builder.build()
  } else {
    await nuxt.ready()
  }

  // Give nuxt middleware to express
  app.use(nuxt.render)

  // Listen the server
  app.listen(port, host)
  consola.ready({
    message: `Server listening on http://${host}:${port}`,
    badge: true
  })
}
start()
